package sessionbeans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import model.Cliente;
import vos.ClienteVO;

/**
 * Session Bean implementation class AdministradorClientes
 */
@Stateless
public class AdministradorClientesBean implements AdministradorClientes {

	@PersistenceContext(unitName = "OficinaVentasPU")
    private EntityManager em;
	
	//@EJB
	//private AdministradorCotizaciones administradorCotizaciones;
	
    public AdministradorClientesBean() {}

	@Override

	public void altaCliente(ClienteVO clienteVO) {
		Cliente cliente = new Cliente();
		cliente.setIva(new Double(21.0));
		cliente.setVO(clienteVO);
		em.persist(cliente.getCondicionVenta());
		em.persist(cliente);
		System.out.println("Persistido el cliente " + cliente.getId() + " " + cliente.getNombre());		
	
		/*
		//Agrego unas cotizaciones para probar
		Cotizacion cotizacion1 = new Cotizacion();//vigente
		cotizacion1.setFechaemision(new Date(111, 10, 29).getTime());//28/10/2011
		cotizacion1.setVigencia(20);
		cotizacion1.setCliente(cliente);
		ItemCotizacion it11 = new ItemCotizacion("11", 1, "1", "1", "1", new Double(1), new Double(1), new Double(1), 1);
		ItemCotizacion it12 = new ItemCotizacion("12", 1, "1", "1", "1", new Double(1), new Double(1), new Double(1), 1);
		it11.setCotizacion(cotizacion1);
		it12.setCotizacion(cotizacion1);
		cotizacion1.getListaItemCotizacion().add(it11);
		cotizacion1.getListaItemCotizacion().add(it12);	
		
		Cotizacion cotizacion2 = new Cotizacion();//no vigente
		cotizacion2.setFechaemision(new Date(111, 9, 27).getTime());//28/10/2011
		cotizacion2.setVigencia(20);
		cotizacion2.setCliente(cliente);
		ItemCotizacion it21 = new ItemCotizacion("21", 2, "2", "2", "2", new Double(2), new Double(2), new Double(2), 2);
		ItemCotizacion it22 = new ItemCotizacion("22", 2, "2", "2", "2", new Double(2), new Double(2), new Double(2), 2);
		it21.setCotizacion(cotizacion2);
		it22.setCotizacion(cotizacion2);
		cotizacion2.getListaItemCotizacion().add(it21);
		cotizacion2.getListaItemCotizacion().add(it22);
		
		Cotizacion cotizacion3 = new Cotizacion();//vigente
		cotizacion3.setFechaemision(new Date(111, 10, 27).getTime());//28/10/2011
		cotizacion3.setVigencia(22);
		cotizacion3.setCliente(cliente);
		ItemCotizacion it31 = new ItemCotizacion("31", 3, "3", "3", "3", new Double(3), new Double(3), new Double(3), 3);
		ItemCotizacion it32 = new ItemCotizacion("32", 3, "3", "3", "3", new Double(3), new Double(3), new Double(3), 3);
		it31.setCotizacion(cotizacion3);
		it32.setCotizacion(cotizacion3);
		cotizacion3.getListaItemCotizacion().add(it31);
		cotizacion3.getListaItemCotizacion().add(it32);
		
		Cotizacion cotizacion4 = new Cotizacion();//no vigente
		cotizacion4.setFechaemision(new Date(111, 9, 28).getTime());//28/10/2011
		cotizacion4.setVigencia(19);
		cotizacion4.setCliente(cliente);
		ItemCotizacion it41 = new ItemCotizacion("41", 4, "4", "4", "4", new Double(4), new Double(4), new Double(4), 4);
		ItemCotizacion it42 = new ItemCotizacion("42", 4, "4", "4", "4", new Double(4), new Double(4), new Double(4), 4);
		it41.setCotizacion(cotizacion4);
		it42.setCotizacion(cotizacion4);
		cotizacion4.getListaItemCotizacion().add(it41);
		cotizacion4.getListaItemCotizacion().add(it42);
		
		
		em.persist(cotizacion1);
		em.persist(cotizacion2);
		em.persist(cotizacion3);
		em.persist(cotizacion4);*/
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ClienteVO> obtenerClientes() {
		String query = "select c from Cliente c";
		Query q = em.createQuery(query);
		List<Cliente> clientes = q.getResultList();
		List<ClienteVO> clientesVO = new ArrayList<ClienteVO>();
		
		for(Cliente c : clientes){
			clientesVO.add(c.getVO());
		}
		return clientesVO;
	}

	@Override
	public void eliminarCliente(Integer idCliente) {
		Cliente cliente = em.find(Cliente.class, idCliente);
		em.remove(cliente);
		System.out.println("Eliminado el cliente " + cliente.getId() + " " + cliente.getNombre());
	}
	@Override
	public ClienteVO obtenerClienteVOPorId(Integer idCliente){
		return this.obtenerClientePorId(idCliente).getVO();
	}

	@Override
	public void actualizarCliente(ClienteVO clienteVO) {
		Cliente cliente = em.find(Cliente.class, clienteVO.getId());
		cliente.setVO(clienteVO);
		em.merge(cliente);
		System.out.println("Actualizado el cliente: " + cliente.getId() + " " + cliente.getNombre());
	}

	@Override
	public Cliente obtenerClientePorId(Integer idCliente) {
		Cliente cliente = em.find(Cliente.class, idCliente);
		System.out.println("Obtenido el cliente " + cliente.getId() + " " + cliente.getNombre());
		return cliente;
	}

}
